/**
 * 
 */
package com.wolfpire.proms.dao;

import java.util.List;
import java.util.Map;

import com.wolfpire.proms.model.Task;
import com.wolfpire.system.common.EasyuiPage;
import com.wolfpire.system.common.Page;
import com.wolfpire.system.common.base.dao.IBaseHibernateDao;

/**
 * 任务持久层接口
 * @author lihd
 *
 */
public interface TaskDao extends IBaseHibernateDao<Task, Long> {
	
	/**
	 * 查询任务(带列表)
	 * @param page
	 * @param filterTask	过滤条件
	 * @return
	 */
	public Page<Task> findTasks(Page<Task> page, Task filterTask);
	
	/**
	 * 申请的任务
	 * @param page
	 * @param filterTask
	 * @return
	 */
	public Page<Map<String, Object>> findApplyTasks(Page<Map<String, Object>> page, Task filterTask, String formTypeId);
	
	/**
	 * 待办
	 * @param page
	 * @param filterTask
	 * @param formTypeId
	 * @return
	 */
	public Page<Map<String, Object>> findTodoTasks(EasyuiPage<Map<String, Object>> page, Task filterTask, String formTypeId);
	
	/**
	 * 根据项目指标统计子集任务数(深度统计)
	 * @param projectIndex
	 * @return
	 */
	public Integer findTaskCount(Long projectIndex);
	
	/**
	 * 统计项目指标统计子集资金(深度统计)
	 * @param piId
	 * @param type ("plan"表示计划使用资金，"fact"表示实际使用资金)
	 * @return
	 */
	public String findTaskAmount(Long projectIndex, String type);
	
	/**
	 * 根据项目指标获取任务Id（向下获取）
	 * @param projectIndexId
	 * @return
	 */
	public List<Long> getAllTaskIdsByProjectIndexId(Long projectIndexId);

	public Page<Map<String, Object>> findMyTasks(EasyuiPage<Map<String, Object>> page, Task filterTask, String formTypeId);
	
	/**
	 * 根据项目指标统计任务进度占比
	 * @param projectIndexId
	 * @return
	 */
	public Map<String, Object> findCountTaskProgress(Long projectIndexId);
	
	/**
	 * 获取某个指标下任务的平均进度
	 * @param projectIndexId
	 * @return
	 */
	public String findTaskAvgProgress(Long projectIndexId);
	
	/**
	 * 统计待办数量
	 * @param filterTask
	 * @param formTypeId
	 * @return
	 */
	public int countTodoTasks(Task filterTask, String formTypeId);
	
	/**
	 * 根据项目指标统计任务信息（向下钻取）
	 * @param projectIndexId
	 * @return
	 */
	public Map<String, Object> findCountTaskInfo(Long projectIndexId);

}
